package wrapper;

public class integerDemo {
    public static void main(String[] args) {
        //演示包装类的定义
     /*   Integer i1 = new Integer(5);//Integer对象
        Integer i2 = new Integer(5);//Integer对象
        System.out.println(i1==i2);// false 比较的是地址
        System.out.println(i1.equals(i2)); // true包装类重写equals()比较值了
        Integer i3 = Integer.valueOf(5);//valueOf()方法会复用1个字节(-128到127)范围内的数据   超过这个范围就会重新创建对象
        Integer i4 = Integer.valueOf(5);//valueOf()方法会复用1个字节(-128到127)范围内的数据   超过这个范围就会重新创建对象
        System.out.println(i3==i4);//valueOf()方法会服用1个字节(-128到127)范围内的数据
        System.out.println(i3.equals(i4));   //因为equals()方法重写了所以相同了
       */
       Integer i = Integer.valueOf(5);//基本类型转换为包装类型
        int j  = i.intValue();//包装类型转换为基本类型
        Integer a = 100;//装箱
        Integer b = 200;//装箱
        Integer c =a+b;//拆箱再装箱      把a的包装类拆开和b的包装类拆开进行相加，再把结果再包装成包装类
        double d = c ;//拆箱            把c的包装类拆开
        //装箱和拆箱是编译器认可的而不是虚拟机
        //编译器在生成类的字节码时插入必要的方法调用
        //Integer a =100  => Integer a = Integer.valueOf(100);
        //Integer b =200  => Integer b = Integer.valueOf(200);
        //Integer c =a+b  => Integer c = Integer.valueOf(a.intValue()+b.intValue());
        // int d =c       =<c   int d = c.intValue();
         /*
         * 在jdk1.5之后，推出了一个新特性：自动拆装箱子
         *在编译器编译时若发现是基本类型与包装类型之间的操作
         * 则自动补齐代码完成转换工作
         *这个过程叫做自动拆装箱子
         */
        // 触发了自动装箱特性，会被编译为：Integer m=Integer.valueOf(5);
        Integer m=5; //基本类型到包装类---------装箱
        int n = m ;//包装类到基本类型---------拆箱
        //演示包装类的常用操作
        int max = Integer.MAX_VALUE;//获取int的最大值
        int min = Integer.MIN_VALUE;//获取int的最小值
        System.out.println("int的最大值是："+max);// int
        System.out.println("int的最小值是："+min);// int
        long maxLong = Long.MAX_VALUE;//获取long的最大值
        long minLong = Long.MIN_VALUE;//获取long的最小值
         System.out.println("long的最大值为："+maxLong);// long
         System.out.println("long的最小值为："+minLong);// long
         String s1 ="40";//字符串"40"
         int age = Integer.parseInt(s1);//将字符串s1转换为int类型并赋给age
         System.out.println("age"+age);//40 int类型
         String s2 ="123.456";
         double price  = Double.parseDouble(s2);//将字符串s2转换为double类型并赋给price
         System.out.println(price );//结果为123.456 double类型




    }
}
